# https://www.lintcode.com/problem/isomorphic-strings/description
# 描述
# 给定两个字符串 s 和 t ，确定它们是否是同构的。
# 两个字符串是同构的如果 s 中的字符可以被替换得到 t。
# 所有出现的字符必须用另一个字符代替，同时保留字符串的顺序。 没有两个字符可以映射到同一个字符，但一个字符可以映射到自己。

# 你可以假定两个字符串 s 和 t 是一样长度的.

# 样例
# 给出 s = "egg", t= "add", 返回 true。
# 给出 s = "foo", t= "bar", 返回 false。
# 给出 s = "paper", t= "title", 返回 true。

class Solution:
    """
    @param s: a string
    @param t: a string
    @return: true if the characters in s can be replaced to get t or false
    """
    def isIsomorphic(self, s, t):
        # 1323ms
        # chars1 = [''] * 256
        # chars2 = [''] * 256
        # l = len(s)
        # for i in range(l):
        #     chars1[ord(s[i])] = i
        #     chars2[ord(t[i])] = i
            
        # for i in range(l):
        #     if chars1[ord(s[i])] != chars2[ord(t[i])]:
        #         return False
        
        # return True
		
		# 1451ms
        dic = {}
        l = len(s)
        for i in range(l):
            if s[i] not in dic:
                dic[s[i]] = t[i]
            elif dic[s[i]] != t[i]:
                return False
                
        dic.clear()
        
        for i in range(l):
            if t[i] not in dic:
                dic[t[i]] = s[i]
            elif dic[t[i]] != s[i]:
                return False
                
        return True